﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using blackhouse.BlackApart.Business.Apartments;
using blackhouse.BlackApart.Business.Reservations;

namespace blackhouse.BlackApart.Business.Opinions {
    public interface IOpinion {

        int Id { get; }
        string InPlusOpinion { get; set; }
        string InMinusOpinion { get; set; }
        string Answer { get; set; }
        DateTime PublishedDate { get; set; }
        AuthorOpinion Publisher { get; set; }
        bool IsPublic { get;}

        bool Save(int userId);
        void AddOpinionDetailValue(int categoryId, float val);
        float GetAverageRating();
        float GetOpinionDetailValue(int categoryId);
        IOpinion[] GetOpinions();
        IOpinion[] GetOpinions(bool includeNonPublic);
        void Publish(int userId);
        int FindReservationToAddOpinion(int apartmentTypeId);
        IApartmentGroup GetAssociatedApartmentGroup();
        int GetAssociatedApartmentGroupId();
        IOpinion[] GetSimilarOpinions(int opinionId, TimeSpan timeWatch);
        void Visit(IOpinionVisitor visitor);
        bool Moderate(int userId);
        List<IWebReservation> FindInterviewerReservation();

    }
}
